// 定义hashcode函数
export function hashcode(obj) {
  // 将对象obj转换为字符串
  let str = JSON.stringify(obj)
  let hash = 0
  if (str.length === 0) return hash
  for (let i = 0; i < str.length; i++) {
    hash = ((hash << 5) - hash) + str.charCodeAt(i)
    hash |= 0 // Convert to 32bit integer
    //hash = hash & hash; // Convert to 32bit integer
  }
  return hash
}


export function hashCode1(strKey)
{
  let hash = 0
  if(!isNull(strKey))
  {
    for (let i = 0; i < strKey.length; i++)
    {
      hash = hash * 31 + strKey.charCodeAt(i)
      hash = intValue(hash)
    }
  }
  return hash
}
function isNull(str){
  return str == null || str.value == ''
} 
function intValue(num)
{
  let MAX_VALUE = 0x7fffffff
  let MIN_VALUE = -0x80000000
  if(num > MAX_VALUE || num < MIN_VALUE){
    return num &= 0xFFFFFFFF
  }
  return num
}

export function hashCode2(strkey) {
  let a = 31
  for (let b = 0,c = strkey.length; b < c;) {
    a ^= (a << 5) + (a >> 2) + strkey.charCodeAt(b++)
  }
  return a
}

// hashCode = function(str){
//   let hash = 0
//   if (str.length == 0) return hash
//   for (i = 0; i < str.length; i++) {
//     char = str.charCodeAt(i)
//     hash = ((hash<<5)-hash)+char
//     hash = hash & hash // Convert to 32bit integer
//   }
//   return hash
// }
 
// djb2Code = function(str){
//   let hash = 5381
//   for (i = 0; i < str.length; i++) {
//     char = str.charCodeAt(i)
//     hash = ((hash << 5) + hash) + char /* hash * 33 + c */
//   }
//   return hash
// }
 
// sdbmCode = function(str){
//   let hash = 0
//   for (i = 0; i < str.length; i++) {
//     char = str.charCodeAt(i)
//     hash = char + (hash << 6) + (hash << 16) - hash
//   }
//   return hash
// }
 
// loseCode = function(str){
//   let hash = 0
//   for (i = 0; i < str.length; i++) {
//     char = str.charCodeAt(i)
//     hash += char
//   }
//   return hash
// }